package main

import "fmt"

//结构体遇到的问题

type myInt int

func (d myInt) hello() {
	fmt.Println("我是一个int")
}

type person struct {
	name string
	age  int
}

func main() {

	//问题1. myInt(100)是个啥

	//声明一个int32类型的变量x,它的值是10
	//1.方法1
	/* 	var x int32
	   	x = 10 */
	//2.方法2
	var x int32 = 10
	//3.方法3
	//var x=int32(10)
	//4.方法4
	//x := int32(10)
	fmt.Printf("x===%T---%v\n", x, x)

	//声明一个myInt类型的变量m,它的值是100

	//1.
	/* 	var m myInt
	   	m=100 */

	//2.
	//var m myInt = 100

	//3.
	//var m = myInt(100)

	//4.
	m := myInt(100) //强制类型转换

	fmt.Printf("%T\n", m)
	m.hello()

	//问题2：结构体初始化

	//方法1,声明变量，并初始化
	var p person    //声明一个person类型的变量p
	p.name = "wode" //初始化
	p.age = 18
	fmt.Println("p==", p)
	//2.键值对初始化
	var p2 = person{
		name: "zs",
		age:  15,
	}
	fmt.Println("p2==", p2)
	//3.值列表初始化
	var p3 = person{
		"zs1",
		18,
	}
	fmt.Println("p3==", p3)
	p4 := newPerson("fgh", 40)
	fmt.Println(p4)

}

//问题3：为什么要有构造函数
func newPerson(name string, age int) person {
	//别人调用我，我能给她一个person类型的变量
	return person{
		name: name,
		age:  age,
	}
}
